package com.cx.service;

import com.cx.meta.dto.CxUser;
import com.cx.meta.entity.UserClient;
import com.cx.meta.entity.UserRegister;
import com.cx.meta.model.po.UserQueryParams;
import com.cx.meta.model.vo.PageData;
import com.cx.meta.model.vo.UserInfo;
import com.cx.meta.model.vo.UserToken;

/**
 * @author flysand
 * @package com.cx.service
 * @date 2021-11-07 18:06
 * @des UserService : 用户业务接口
 */
public interface UserService {


    /**
     * 获取验证码
     *
     * @param mobile       手机号码
     * @param second       过期时间 秒
     * @param verifyFreeze 是否校验冻结
     * @return 验证码
     */
    String getMobileCode(String mobile, int second, boolean verifyFreeze);

    /**
     * 校验手机验证码
     *
     * @param mobile       手机号
     * @param code         验证码
     * @param verifyFreeze 是否校验冻结
     * @return 校验结果
     */
    boolean verifyCode(String mobile, String code, boolean verifyFreeze);


    /**
     * 注册用户
     *
     * @param user 注册信息
     * @return
     */
    CxUser registerUser(UserRegister user);

    /**
     * 获取所有用户
     *
     * @param userQueryParams 查询参数
     * @return 分页数据
     */
    PageData<UserInfo> getUserByQueryParams(UserQueryParams userQueryParams);

    /**
     * 根据手机号查询用户
     *
     * @param mobile 手机号
     * @return 用户
     */
    CxUser getUserByMobile(String mobile);

    /**
     * 手机号+验证码登录
     *
     * @param mobile     手机号
     * @param code       验证码
     * @param userClient 客户端信息
     * @return 认证token
     */
    String mobileLogin(String mobile, String code, UserClient userClient);

    /**
     * 登录名+密码登录
     *
     * @param loginName  登录名：用户名 证件号 邮箱
     * @param password   密码
     * @param userClient 客户端信息
     * @return 认证token
     */
    String userLogin(String loginName, String password, UserClient userClient);

    /**
     * 查询token有效期
     *
     * @param token
     * @return
     */
    UserToken getUserToken(String token);

    /**
     * 修改签名
     *
     * @param token    用户token
     * @param signature 签名
     * @return 返回修改ude签名
     */
    String modifySignature(String token, String signature);

}
